﻿--lua script
--#include "data\envir\FubenCountConfig.lua" once

--#include "data\functions\FuBenNpcFunc\FubenCommonFunc.lua" once
--#include "data\config\quest\MiscQuest.lua" once
--#include "data\config\quest\EntrustReward.lua" once
--#include "data\functions\ActorEvent\DoCrossDayData.lua" once	--处理跨天数据
--#include "data\functions\player.lua" once -- 角色处理
--#include "data\functions\Activity\DailyActivity\MoZun.lua" once --魔尊战场活动
--#include "data\functions\Boss\EquipBossCommon.lua" once           --装备boss
--#include "data\functions\Activity\Escort\Escort.lua" once         --运镖
--#include "data\functions\Activity\OpenServer\OpenServerTotalRecharge.lua" once

LocalDT.MEDITIME = 21600        
----------------------------------------------------------------------------------------

--清除以前没完成的任务
function removeOldQuests( sysarg )
	for k, qid in ipairs(NewDayRemoveQuests) do
		if Actor.hasQuest(sysarg, qid) then
			Actor.removeQuestById(sysarg, qid)
		end
	end
end

--保存玩家的PK模式数据
function savePKModeDataFunc(sysarg,var)
	local pkmode = var.pkmode
  if pkmode == nil then 
		var.pkmode = {}
		pkmode = var.pkmode
	end
	
	pkmode[1] = Actor.getPkMode(sysarg)
	--print("PKMODE:"..pkmode[1])
end

--载入玩家的PK模式数据
function loadPKModeDataFunc(sysarg)
  local var = Actor.getStaticVar( sysarg )
  pkmode = var.pkmode
	if pkmode == nil then 
	  --print("pkmode is nil !!")
	  var.pkmode = {}
	  pkmode = var.pkmode
		--Actor.setPkMode(sysarg,fpZY)		
	else	
	  --print("pkmode:"..pkmode[1])
	  if pkmode[1]== nil or pkmode[1] == fpZY then pkmode[1] = fpPeaceful end
		if pkmode[1]~= nil then 
			Actor.setPkMode(sysarg,pkmode[1])
			--print("get:"..Actor.getPkMode(sysarg))
		end
	end
		
end
--保存玩家的帮派在职时间
function saveGuildZzTimeFunc(sysarg,var)
	--print("set guild time !!")
	local gZztime = Actor.getGuildZzTime(sysarg)
	--print("Zztime:"..gZztime)
  local guildzz = var.guildzz
	if guildzz == nil then
		var.guildzz = {}
		guildzz = var.guildzz
	end
	guildzz[1] = Actor.getGuildZzTime(sysarg)
	guildzz[2] = Actor.getGuildWealTime(sysarg)
end
--载入玩家的帮派在职时间
function laodGuildZzTimeFunc(sysarg)
	
 local var = Actor.getStaticVar( sysarg )
 local guildzz = var.guildzz
	if guildzz == nil  then 
		Actor.setGuildZzTime(sysarg,0) 
	else
	--print("guildzz:")
	  if guildzz[1] ~= nil then  
	  	Actor.setGuildZzTime(sysarg,guildzz[1])
	  	
		end	
		if guildzz[2] ~= nil then 
			Actor.setGuildWealTime(sysarg,guildzz[2])
		end
	end
end

--载入和处理打坐时间相关数据
function loadDazuoDatas(sysarg)
  local var = Actor.getStaticVar( sysarg )
  local medi = var.medi
		if medi == nil or medi[1] == nil then
	  	
	  	var.medi = {}
	  	medi = var.medi
	  	Actor.setDefaultPracticeTime(sysarg,LocalDT.MEDITIME)
	  	--print("medi")
		else
			--print("TimeData[1]:"..medi[1])
	  	if medi[1] ~= nil then 
	  	  if medi[1] > LocalDT.MEDITIME then
	  	  	medi[1] = LocalDT.MEDITIME
	  	  end
	  		Actor.setDefaultPracticeTime(sysarg, medi[1])
			end	  
	  end
end

--初始化副本次数
function FubenCountInit(sysarg)
  local var = Actor.getStaticVar(sysarg)
	local fb = var.fb
	if fb == nil then
    --print("fbData is nil !!")
	  var.fb = {}
	  fb = var.fb
	end
	for i=1 ,#FubenCountConfig do
		fb[i] = FubenCountConfig[i]
	end
end


--退出时保存副本数据
function saveOnLogoutFuBen( sysarg ,var)
   local fb = var.fb
  if ( fb == nil ) then
	  var.fb = {}
	  fb = var.fb
  end
  for i = 1 ,6 do
	   fb[i] = Actor.getDayFubenCount(sysarg,i)		--将玩家进入副本的次数保存起来
     --print("out fb[i]:"..fb[i])
  end
end


--重置玩家每日PK获取或掉落经验次数
function resetPkExpGetOrDropTimes(sysarg)
	local svar = Actor.getStaticVar(sysarg)
	local data = svar.killerData	--击杀信息
	if not data then 
		svar.killerData = {}
		data = svar.killerData
	end
	data[4] = nil --每日PK经验掉落次数
	data[5] = nil --每日PK经验获得次数
end

-- 天书任务
function noticeDoBookQuest(sysarg)
	if Actor.checkActorLevel(sysarg, BookQuestConfig.BookQuestLevel, 0) then
		Actor.sendBookQuest(sysarg, BookQuestConfig.BookQuestId)
	end
end

function loadBookQuestInfo( sysarg )
	local sVar = Actor.getStaticVar(sysarg)
    if not sVar.days then sVar.days = {} end
	local times = sVar.days.CoinQuestTimes or 0
	local flushLv = sVar.BookFlushLevel  or 0
	local surpItemId = sVar.BookSurpItemId  or 0
	Actor.setQuestBookInfo(sysarg, times, flushLv, surpItemId)

	noticeDoBookQuest(sysarg)
end


----------------------------------------------------------------------------------------
--玩家登陆时读取玩家的.[数据参数：玩家的ActorID；]
function loadActorData(sysarg) 
	local var = Actor.getStaticVar( sysarg )
	if not var.days then
		var.days = {}
	end
	--AllDayLoginOldDataToNewData(sysarg)             --勇闯魔巢旧数据转化
	laodGuildZzTimeFunc(sysarg)						--载入玩家帮派在职时间
	loadPKModeDataFunc(sysarg)						--载入玩家的PK模式
	loadBookQuestInfo(sysarg)						--伏魔任务
	--loadSignAgain(sysarg, var.days)				--重签
	--sendAccumulateSignAwardFlag(sysarg,var)		--累计签到奖励
	OnAddPet(sysarg)								--宝宝上线加载
	--OnRemoveLastSbkLeader(sysarg)					--删除上届城主的专属武器
	--SendApplyDartLeftTimes(sysarg)				--押镖剩余次数
	--OnPaySalesActorLogin(sysarg)					--充值促销系统
	--QuestFuBen(sysarg)							--检测副本任务
	--SendHideWeixin(sysarg)						--微信
	LoginPlayerSbkTitleChange(sysarg)				--沙巴克头衔
	OnSbkActorLogin(sysarg)							--沙巴克相关
    LoginPlayerContendTitleChange(sysarg)           --行会争夺头衔
    OnContendActorLogin(sysarg)                     --行会争夺
	--Quest_OnPlayerLogin(sysarg, isCrossDay, var)	--任务
	OnGuildLoginIn( sysarg )						--行会登陆
	OnBossSoulLogin( sysarg )						--兽魂
	SendOpenServerDays(sysarg)						--开服天数
	OnTwelvePalacesLogin(sysarg)					--十二星宫	

	SendCommonDailyChargeAndCounsume( sysarg )		--下发每日消费、充值数据
	CombineServerLogin( sysarg )					--合服系统登陆，发送一些数据
    OnLoginDropLineRebackToFuben(sysarg)            --重新回到副本

    operationLoginInHandler(sysarg) 

    --OnMoZunLoginHandler(sysarg)                     --魔尊登录

    onEquipBossActorLoginHandler(sysarg)            --装备boss登录

    updateWorldCultureBuff(sysarg)                  --世界等级处理

    NationwideRedPacketsLogin(sysarg)               --全民红包登陆

    OnEscortLogin(sysarg)

    OnConcVipLogin( sysarg )						--并行VIP（特权）
    OnFashionRechargeLogin(sysarg)					--时装首充
    OnSwingEquipLogin(sysarg)						--翅膀
    OnOpenServerHeroSwingLogin(sysarg)				--开服英雄翅膀
    --OpenServerTOtalRechargeSpecialLogin(sysarg)    

end

--玩家退出时保存玩家的数据[参数：玩家的actorID；]
function SaveData(sysarg)
  local var = Actor.getStaticVar( sysarg )
  	--各种处理
  	--saveOnLogoutFuBen( sysarg,var )  					--副本
  	--saveDazuoDatas(sysarg,var)       					--保存当天打坐剩下时间
	saveGuildZzTimeFunc(sysarg,var)        				--帮派在职时间
	savePKModeDataFunc(sysarg,var)						--玩家的PK模式数据
end

--------------------------------------------------------------------------------------------------------------------
--返回玩家需要的数据给客户端[参数列表：子系统ID,消息号ID,数据指针]
function loadActorDataFunc(sysarg,systemid,megid,pack)
  local hook = Actor.getStaticVar( sysarg ).hook
  if hook == nil or hook == {} then 
	  local npack = DataPack.allocPacket(sysarg,systemid,megid)  --申请一个数据包
	  if npack == nil then
		--print("npack:nil")
		return
	  end
	  DataPack.writeInt(npack,0)
	  DataPack.flush(npack)
	  return
  end
  local npack = DataPack.allocPacket(sysarg,systemid,megid)  --申请一个数据包
  if npack == nil then
	--print("npack:nil")
	return
  end
  local ncount = table.getn(hook)/2
  --print("ncount:"..ncount)
  DataPack.writeInt(npack,ncount)
  for i = 1 ,ncount*2 do 
	DataPack.writeInt(npack,actorGameData[i])
  end
  DataPack.flush(npack)
end

--保存玩家数据的函数，[参数1：数据ID；参数2：玩家的ActorID；参数3：需要保存到玩家文件的数据表]
function saveActorDataFunc(sysarg,systemid,megid,pack)
  
  local hook = Actor.getStaticVar( sysarg ).hook
  if hook == nil then
	hook = {}
  end
 
  local nCount = DataPack.readInt(pack)
  --print("nCount:"..nCount)
  for i = 1,nCount*2 do
	hook[i] = DataPack.readInt(pack)
  end
end

-- 再签一次标记
function loadSignAgain(sysarg, days)
	local qdAgain = 1;
	if not days.qdAgain then
		qdAgain = 0;
	end
	local netPack = DataPack.allocPacket(sysarg, LogicCmd.miscSys.sysId, LogicCmd.miscSys.sub.sQDAgainFlags);
	DataPack.writeByte(netPack,qdAgain); -- 再领一次成功，返回标志
	DataPack.flush(netPack);
end

function sendAccumulateSignAwardFlag(sysarg,var)
	if not var and not var.ljqdAward then return end
	local netPack = DataPack.allocPacket(sysarg, LogicCmd.miscSys.sysId, LogicCmd.miscSys.sub.sLJQDAwardFlags);
	DataPack.writeUInt(netPack, var.ljqdAward);
	DataPack.flush(netPack);
end
